# 性能优化技巧 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 可用性能工具 | **工具** | **用途** | **示例命令** | | --- | --- | --- | | `top` | 查看进程、CPU、内存实时占用 | `top -b -n 1` | | `ps` | 按 CPU 或内存排序查看进程 | `ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%cpu` | | `uptime` | 查看运行时间与系统负载 | `uptime` | | `mpstat` | 查看整体 CPU 利用率 | `mpstat 1 2` | | `vmstat` | 查看 CPU、内存、swap、I/O 粗略状态 | `vmstat 1 2` | | `free` | 查看内存与 swap 使用情况 | `free -h` | | `iostat` | 查看块设备 I/O 统计 | `iostat -d -k 1 2` | | `df` | 查看文件系统空间占用 | `df -h` | | `du` | 查看目录占用 | `du -sh /data/*` | | `lscpu` | 查看 CPU 架构与频率信息 | `lscpu` | | `lsblk` | 查看块设备和挂载关系 | `lsblk` | | `sysctl` | 查看内核参数 | `sysctl vm.swappiness` | | `systemctl` | 查看服务状态 | `systemctl --failed --no-pager` | | `journalctl` | 查看服务或系统日志 | `journalctl -p err -n 50 --no-pager` | | `ping` | 基础网络连通性测试 | `ping -c 3 127.0.0.1` | # 系统性能监控 ## 查看整体负载 先用 `uptime` 查看系统运行时间和 load average: ```bash adb shell 'uptime' ``` 示例输出中包含 `load average`。如果 load average 长时间明显高于 CPU 核数,需要进一步查看 CPU、I/O 或进程占用。 ## 查看进程 CPU 与内存占用 使用 `top` 查看当前系统进程、CPU、内存概况: ```bash adb shell 'top -b -n 1 | head -20' ``` 如果要快速定位 CPU 占用较高的进程,可以使用: ```bash adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%cpu | head -12' ``` 如果要按内存占用排序,可以使用: ```bash adb shell 'ps -eo pid,ppid,comm,%cpu,%mem,args --sort=-%mem | head -12' ``` ## 查看 CPU 使用率 `mpstat` 可用于观察 CPU 的用户态、内核态、I/O 等待和空闲比例: ```bash adb shell 'mpstat 1 2' ``` 本次实测中,`mpstat` 可正常运行,示例平均空闲比例约 92% 以上,说明测试时系统整体 CPU 压力不高。 ## 查看 CPU 频率和调度策略 当前开发板 CPU0-7 均在线,可通过以下命令查看: ```bash adb shell 'cat /sys/devices/system/cpu/online' ``` 查看当前 CPU governor: ```bash adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done' ``` CPU0-7 的 governor 均为 `performance`。可用 governor 包含 `userspace`、`ondemand`、`walt`、`conservative`、`powersave`、`performance`、`schedutil`。 查看当前频率: ```bash adb shell 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq; do [ -e "$f" ] && printf "%s=" "$f" && cat "$f"; done' ``` 本次实测中,CPU0-3 当前约为 1804800 kHz,CPU4-7 当前约为 2016000 kHz。 # 内存与 Swap 监控 ## 查看内存使用情况 使用 `free` 查看内存、cache 和 swap 使用情况: ```bash adb shell 'free -h' ``` 本次实测中,系统总内存约 3.5 GiB,available 约 2.4 GiB,swap 约 1.8 GiB 且未明显使用。 ## 查看 vmstat `vmstat` 可以快速观察运行队列、内存、swap、I/O 和 CPU 使用情况: ```bash adb shell 'vmstat 1 2' ``` 重点关注: - `r`:运行队列,持续偏高时说明 CPU 可能繁忙。 - `si` / `so`:swap in/out,持续非零说明内存压力较大。 - `wa`:I/O wait,持续偏高说明存储 I/O 可能成为瓶颈。 - `id`:CPU idle,持续较低说明 CPU 利用率较高。 ## 查看 zram swap 当前系统使用 `/dev/zram0` 作为 swap,可通过以下命令查看: ```bash adb shell 'cat /proc/swaps; zramctl 2>/dev/null || true' ``` 本次实测中,`/dev/zram0` 大小约 1.8 GiB,优先级为 32758,当前几乎未使用。 # 存储 I/O 与空间检查 ## 查看文件系统空间 使用 `df` 查看各挂载点空间占用: ```bash adb shell 'df -h' ``` 本次实测中,根文件系统 `/` 约 7.8 GiB,已使用约 4.1 GiB;`/data` 约 40 GiB,剩余空间较充足。较大的日志、测试文件和临时数据建议优先放到 `/data` 或 `/tmp`,避免占满根文件系统。 ## 查看目录占用 需要定位大文件或大目录时,可以使用: ```bash adb shell 'du -sh /data/* 2>/dev/null | sort -h | tail -20' ``` 如果排查根文件系统空间,可改为检查 `/var`、`/usr`、`/opt` 等目录。 ## 查看块设备 使用 `lsblk` 查看块设备、分区和挂载点: ```bash adb shell 'lsblk' ``` 当前设备主存储为 `mmcblk0`,系统分区、缓存分区、数据分区均挂载在该块设备的不同分区上。 ## 查看 I/O 统计 当前开发板上的 `iostat` 为 BusyBox 版本,不支持 `-x` 扩展参数。可使用以下命令查看基础块设备 I/O: ```bash adb shell 'iostat -d -k 1 2' ``` 如果需要观察 CPU 与 I/O 的组合状态,可结合 `vmstat 1 2` 一起查看。 # 网络状态检查 当前开发板可使用 `ip` 和 `ping` 做基础网络检查: ```bash adb shell 'ip -br addr; ip route' ``` 本次实测中,`wlan0` 和 `p2p0` 处于 `DOWN` 状态,未看到默认路由。因此当前不适合写入外网吞吐或网络带宽测试流程。 本地回环连通性可用以下命令验证: ```bash adb shell 'ping -c 3 -W 1 127.0.0.1' ``` 本次实测中,回环地址 ping 测试 0% 丢包,可用于确认基础网络栈工作正常。 # 服务与日志排查 ## 查看失败服务 服务异常会影响启动速度、后台资源占用和功能稳定性。可以先查看失败服务: ```bash adb shell 'systemctl --failed --no-pager' ``` 本次实测中存在若干 failed 服务,例如 `camera_cgroup.service`、`lefbe.service`、`pulseaudio.service`、`qwesd.service`、`thermal-engine.service` 等。具体是否需要优化或关闭,应结合对应功能需求判断。 ## 查看错误日志 查看最近的错误日志: ```bash adb shell 'journalctl -p err -n 50 --no-pager' ``` 如需查看某个服务的日志,可使用: ```bash adb shell 'journalctl -u 服务名 --no-pager -n 100' ``` 排查服务类性能问题时,建议先确认服务是否反复重启、阻塞启动或持续打印错误日志。 # 内核参数查看 当前系统可用 `sysctl` 查看部分内核参数: ```bash adb shell 'sysctl kernel.kptr_restrict kernel.perf_event_paranoid vm.swappiness vm.dirty_ratio vm.dirty_background_ratio net.core.rmem_max net.core.wmem_max' ``` 本次实测值包括: - `kernel.kptr_restrict = 2` - `kernel.perf_event_paranoid = 2` - `vm.swappiness = 100` - `vm.dirty_ratio = 20` - `vm.dirty_background_ratio = 10` - `net.core.rmem_max = 1048576` - `net.core.wmem_max = 1048576` 修改内核参数会影响系统行为,正式修改前应结合具体问题评估,并保留原始值以便回退。 # 进程优先级和 CPU 亲和性 当前系统可使用 `nice`、`renice`、`ionice`、`taskset`。这些工具适合在调试阶段临时调整进程优先级或 CPU 亲和性。 ## 查看命令是否存在 ```bash adb shell 'command -v taskset; command -v nice; command -v renice; command -v ionice' ``` ## 示例:指定 CPU 运行命令 ```bash adb shell 'taskset -c 0-3 命令' ``` ## 示例:调整进程优先级 ```bash adb shell 'renice -n 5 -p 进程PID' ``` 这些命令会改变进程调度行为,建议只在明确知道目标进程和测试目的时使用。 # 温度状态查看 可以通过 thermal sysfs 查看各温区温度: ```bash adb shell 'for z in /sys/class/thermal/thermal_zone*; do [ -e "$z/type" ] && printf "%s " "$(cat "$z/type")" && cat "$z/temp" 2>/dev/null; done | head -40' ``` 本次实测中可读取到 `cpu-1-0`、`cpu-1-1`、`cpu-1-2`、`gpu`、`wlan`、`video` 等温区。温度值通常以毫摄氏度显示,例如 `50800` 表示约 50.8°C。 # 优化排查流程 1. 先执行 `uptime` 和 `top -b -n 1`,判断系统是否整体繁忙。 2. 如果 CPU 高,使用 `ps --sort=-%cpu` 和 `mpstat` 定位进程与 CPU 使用率。 3. 如果内存紧张,使用 `free -h`、`vmstat 1 2` 和 `cat /proc/swaps` 查看 available、swap 和 zram 状态。 4. 如果系统卡顿但 CPU 不高,使用 `vmstat` 和 `iostat -d -k 1 2` 判断是否存在 I/O 等待或存储访问压力。 5. 如果启动慢或后台异常,使用 `systemctl --failed` 和 `journalctl -p err` 查看失败服务和错误日志。 6. 如果怀疑过热降频,查看 `scaling_cur_freq`、`scaling_governor` 和 thermal zone 温度。 7. 如果涉及网络问题,先确认 `ip -br addr` 和 `ip route`,再进行连通性测试。 # 注意事项 - 本文只保留当前开发板实测可用的工具和命令。 - 当前系统未纳入 `perf`、`htop`、`sar`、`pidstat`、`stress-ng`、`sysbench` 等工具流程。 - 当前 `iperf3` 命令存在依赖库缺失问题,不纳入本文网络吞吐测试流程。 - 涉及 governor、sysctl、renice、ionice、服务启停等操作时,应先明确测试目的并记录修改前状态。 - 正式优化建议一次只改一个变量,修改前后分别记录 `top`、`vmstat`、`mpstat`、`iostat`、`journalctl` 等结果,避免无法判断是哪项修改产生影响。 # 总结 当前开发板可以使用基础 Linux 工具完成 CPU、内存、存储、服务、日志、温度和基础网络状态排查。建议性能优化时先用只读命令确认瓶颈来源,再按 CPU、内存、I/O、服务、日志和温度方向逐项收敛。对于当前系统暂不可用或依赖不完整的工具,不应直接写入常规操作流程。